home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1992 …SCII & the Runetime Code / ADC Developer CD (1992-07) (''Butch ASCII And The Runtime Code'')_iso / Dev.CD 199207.iso / Tools & Apps / Devices & Hardware / A⁄ROSE / FileManager / FileTask.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-06-17  |  5.7 KB  |  294 lines  |  [TEXT/MPS ]

  1. /********************************************************************************/
  2. /*                                                                                */
  3. /*        FileTask.c - A/ROSE file system.                                        */
  4. /*                                                                                */
  5. /*        Richard W. Mincher.  December 20, 1989.                                    */
  6. /*                                                                                */
  7. /*        Copyright © 1989, 1990 Apple Computer, Inc.  All rights reserved.        */
  8. /*                                                                                */
  9. /********************************************************************************/
  10.  
  11. #include    "Types.h"
  12. #include    "Events.h"
  13. #include    "Files.h"
  14. #include    "Memory.h"
  15. #include    "OSUtils.h"
  16. #include    "SegLoad.h"
  17.  
  18. #include    "Arose.h"
  19. #include    "Managers.h"
  20.  
  21. #include    "FileTask.h"
  22.  
  23. EventRecord    event;
  24. AROSEmessage    *msg;
  25. tid_type    myTid;
  26. char        running;
  27.  
  28. main()
  29. {    
  30.     myTid = OpenQueue( nil );
  31.     running = 1;
  32.     if (myTid && !Net_Register_Task( kFileSystemObjectName, kFileSystemTypeName ))
  33.     {
  34.         CloseQueue();
  35.         myTid = nil;
  36.     }
  37.     
  38. //    Have to go to system folder and create A/ROSE folder if necessary.
  39.  
  40.     while(myTid)
  41.     {
  42.         (void)WaitNextEvent(everyEvent, &event, 0, nil);
  43.         while(msg = Receive( OS_MATCH_ALL, OS_MATCH_ALL, OS_MATCH_ALL, -1, nil ))
  44.         {
  45.             switch( msg->mCode )
  46.             {
  47.                     
  48.                 case    FS_OPEN:
  49.                     OpenFile();
  50.                     break;
  51.  
  52.                 case    FS_OPENRF:
  53.                     OpenRes();
  54.                     break;
  55.                     
  56.                 case    FS_READ:
  57.                     ReadFile();
  58.                     break;
  59.                     
  60.                 case    FS_WRITE:
  61.                     WriteFile();
  62.                     break;
  63.                     
  64.                 case    FS_GETFPOS:
  65.                     GetPosition();
  66.                     break;
  67.                     
  68.                 case    FS_SETFPOS:
  69.                     SetPosition();
  70.                     break;
  71.                     
  72.                 case    FS_GETEOF:
  73.                     GetEndOfFile();
  74.                     break;
  75.                     
  76.                 case    FS_SETEOF:
  77.                     SetEndOfFile();
  78.                     break;
  79.                     
  80.                 case    FS_ALLOCATE:
  81.                     Alloc();
  82.                     break;
  83.  
  84.                 case    FS_CLOSE:
  85.                     CloseFile();
  86.                     break;
  87.                     
  88.                 case    FS_CREATE:
  89.                     CreateFile();
  90.                     break;
  91.                     
  92.                 case    FS_DELETE:
  93.                     DeleteFile();
  94.                     break;
  95.  
  96.                 case    FS_GETFINFO:
  97.                     GetInfo();
  98.                     break;
  99.                     
  100.                 case    FS_SETFINFO:
  101.                     SetInfo();
  102.                     break;
  103.                     
  104.                 case    FS_SETFLOCK:
  105.                     SetLock();
  106.                     break;
  107.                     
  108.                 case    FS_RSTFLOCK:
  109.                     ResetLock();
  110.                     break;
  111.                     
  112.                 case    FS_RENAME:
  113.                     RenameFile();
  114.                     break;
  115.                     
  116.                 default:
  117.                     break;
  118.             }
  119.             msg->mTo = msg->mFrom;
  120.             msg->mFrom = myTid;
  121.             msg->mCode |= 1;
  122.             Send( msg );
  123.         }
  124.         if (!running)
  125.         {
  126.             CloseQueue();
  127.             myTid = nil;
  128.         }
  129.     }
  130.     ExitToShell();
  131. }
  132.  
  133. OpenFile()
  134. {
  135.     char    fname[64];
  136.     short    refnum;
  137.     
  138.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  139.     fname[msg->mDataSize] = nil;
  140.     c2pstr( fname );
  141.     msg->mStatus = FSOpen( fname, msg->mSData[0], &refnum );
  142.     msg->mSData[0] = refnum;
  143. }
  144.  
  145. OpenRes()
  146. {
  147.     char    fname[64];
  148.     short    refnum;
  149.     
  150.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  151.     fname[msg->mDataSize] = nil;
  152.     c2pstr( fname );
  153.     msg->mStatus = OpenRF( fname, msg->mSData[0], &refnum );
  154.     msg->mSData[0] = refnum;
  155. }
  156.  
  157. ReadFile()
  158. {
  159.     Ptr        block;
  160.     long    length;
  161.     
  162.     length = msg->mDataSize;
  163.     block = NewPtr( length );
  164.     msg->mStatus = FSRead( msg->mSData[0], &length, block );
  165.     (void)NetCopy( msg->mTo, block, msg->mFrom, msg->mDataPtr, length );
  166.     msg->mDataSize = length;
  167.     DisposPtr( block );
  168. }
  169.  
  170. WriteFile()
  171. {
  172.     Ptr        block;
  173.     long    length;
  174.     
  175.     length = msg->mDataSize;
  176.     block = NewPtr( length );
  177.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, block, length );
  178.     msg->mStatus = FSWrite( msg->mSData[0], &length, block );
  179.     msg->mDataSize = length;
  180.     DisposPtr( block );
  181. }
  182.  
  183. GetPosition()
  184. {
  185.     msg->mStatus = GetFPos( msg->mSData[0], (long *)&(msg->mOData[0]) );
  186. }
  187.  
  188. SetPosition()
  189. {
  190.     msg->mStatus = SetFPos( msg->mSData[0], msg->mOData[0], msg->mOData[1] );
  191. }
  192.  
  193. GetEndOfFile()
  194. {
  195.     msg->mStatus = GetEOF( msg->mSData[0], (long *)&(msg->mOData[0]) );
  196. }
  197.  
  198. SetEndOfFile()
  199. {
  200.     msg->mStatus = SetEOF( msg->mSData[0], msg->mOData[0] );
  201. }
  202.  
  203. Alloc()
  204. {
  205.     msg->mStatus = Allocate( msg->mSData[0], (long *)&(msg->mOData[0]) );
  206. }
  207.  
  208. CloseFile()
  209. {
  210.     msg->mStatus = FSClose( msg->mSData[0] );
  211. }
  212.  
  213. CreateFile()
  214. {
  215.     char    fname[64];
  216.     
  217.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  218.     fname[msg->mDataSize] = nil;
  219.     c2pstr( fname );
  220.     msg->mStatus = Create( fname, msg->mSData[0], msg->mSData[2], msg->mSData[1] );
  221. }
  222.  
  223. DeleteFile()
  224. {
  225.     char    fname[64];
  226.     
  227.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  228.     fname[msg->mDataSize] = nil;
  229.     c2pstr( fname );
  230.     msg->mStatus = FSDelete( fname, msg->mSData[0] );
  231. }
  232.  
  233. SetLock()
  234. {
  235.     char    fname[64];
  236.     
  237.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  238.     fname[msg->mDataSize] = nil;
  239.     c2pstr( fname );
  240.     msg->mStatus = SetFLock( fname, msg->mSData[0] );
  241. }
  242.  
  243. ResetLock()
  244. {
  245.     char    fname[64];
  246.     
  247.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  248.     fname[msg->mDataSize] = nil;
  249.     c2pstr( fname );
  250.     msg->mStatus = RstFLock( fname, msg->mSData[0] );
  251. }
  252.  
  253. GetInfo()
  254. {
  255.     struct    FInfo    fi;
  256.     char    fname[64];
  257.     
  258.     (void)NetCopy( msg->mFrom, msg->mDataPtr, msg->mTo, fname, msg->mDataSize );
  259.     fname[msg->mDataSize] = nil;
  260.     c2pstr( fname );
  261.     msg->mStatus = GetFInfo( fname, msg->mSData[0], &fi );
  262.     (void)NetCopy( msg->mTo, (char *)&fi, msg->mFrom, msg->mDataPtr, msg->mDataSize );
  263.     msg->mDataSize = sizeof(struct FInfo);
  264. }
  265.  
  266. SetInfo()
  267. {
  268.     struct    FInfo    fi;
  269.     char    fname[64];
  270.     
  271.     (void)NetCopy( msg->mFrom, msg->mDataPtr,
  272.         msg->mTo, (char *)&fi, sizeof(struct FInfo) );
  273.     (void)NetCopy( msg->mFrom, msg->mDataPtr + sizeof(struct FInfo),
  274.         msg->mTo, fname, msg->mDataSize - sizeof(struct FInfo) );
  275.     fname[msg->mDataSize - sizeof(struct FInfo)] = nil;
  276.     c2pstr( fname );
  277.     msg->mStatus = GetFInfo( fname, msg->mSData[0], &fi );
  278. }
  279.  
  280. RenameFile()
  281. {
  282.     char    ofn[64];
  283.     char    nfn[64];
  284.     
  285.     (void)NetCopy( msg->mFrom, msg->mDataPtr,
  286.         msg->mTo, ofn, msg->mSData[1] );
  287.         ofn[msg->mSData[1]] = nil;
  288.         
  289.     (void)NetCopy( msg->mFrom, msg->mDataPtr + msg->mSData[1],
  290.         msg->mTo, nfn, msg->mSData[2] );
  291.         nfn[msg->mSData[2]] = nil;
  292.     
  293.     msg->mStatus = Rename( ofn, msg->mSData[0], nfn );        
  294. }